package cn.tiaf

object UserLocationStatic {

  case class UserLocalTime(username: String, location: String, startTime: Int, duration: Int)

  def main(args: Array[String]): Unit = {

    val data:String="UserA,LocationA,8,60 UserA,LocationA,9,60 UserB,LocationB,10,60 UserB,LocationB,11,80"
    //将字符串转换成UserLocalTime对象集合
    val userTimeLst: List[UserLocalTime]= data.split(" ")
      .map(o=>o.split(","))
      .map(a=>UserLocalTime(a(0), a(1), a(2).toInt, a(3).toInt))
      .toList

    /**
     * 按username 和 location 当key进行分组
     * 对每行的values按开始时间升序 以满足每个values的第一个元素为最早开始时间
     * 对values中的 duration进行求和,并定义一个firstTime来保存第一个元素的开始时间
     */
    var firstTime = 0
    val totalMap = userTimeLst.groupBy(u => u.username + "_" + u.location)
      .mapValues(_.sortBy(_.startTime))
      .mapValues(lst=>{
        firstTime=lst.head.startTime
        lst.map(_.duration).sum
      })

    totalMap.foreach({
      case (key,totalDuration)=>println(s"$key,$firstTime,$totalDuration")
     })

  }
}
